#include <bits/stdc++.h>
using namespace std;
const int maxn = 6e3+10, INF = 0x3f3f3f3f;
int H[maxn],d[maxn][2];
vector<int> G[maxn];

void dfs(int u, int fa){
    d[u][0] = 0,d[u][1] = H[u];
    int t = 0;
    for(auto v:G[u]) if(v!=fa){
        dfs(v, u);
        d[u][1] += d[v][0];
        t += max(d[v][1], d[v][0]);
    }
    d[u][0] = t;
}
int main() {
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
    int N; cin >> N;
    for (int i = 1; i <= N; ++i) {
        cin >> H[i];
    }
    for (int i = 0; i < N-1; ++i) {
        int a, b; cin >> a >> b;
        G[a].push_back(b);
        G[b].push_back(a);
    }
    dfs(1, 1);
    cout << max(d[1][0], d[1][1]);
    return 0;
}